<html>
<head><meta charset="utf-8"><title>2021 sprints · t-compiler/wg-polonius · Zulip Chat Archive</title></head>
<h2>Stream: <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/index.html">t-compiler/wg-polonius</a></h2>
<h3>Topic: <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/2021.20sprints.html">2021 sprints</a></h3>

<hr>

<base href="https://rust-lang.zulipchat.com">

<head><link href="https://rust-lang.github.io/zulip_archive/style.css" rel="stylesheet"></head>

<a name="220636736"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/2021%20sprints/near/220636736" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/2021.20sprints.html#220636736">(Dec 21 2020 at 22:11)</a>:</h4>
<p>hey everyone :)</p>



<a name="220636900"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/2021%20sprints/near/220636900" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/2021.20sprints.html#220636900">(Dec 21 2020 at 22:12)</a>:</h4>
<p>I'm not sure when we'll be able to do a sprint next year, but I hope it is soon-ish ^^ While I am fully booked in january and will not be able to take a vacation to work on the sprint, I'm on vacation now and plan to spend some time planning and preparing for the next one</p>



<a name="220637305"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/2021%20sprints/near/220637305" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/2021.20sprints.html#220637305">(Dec 21 2020 at 22:17)</a>:</h4>
<p>There was the question of periodicity: how often should we have one. I was thinking since it was also a way for Niko to have an easier time scheduling for multiple projects requiring some block of time, worst case whether or not anyone else would participate at the same time (of course the idea is that we do), it seems that 3 months is too long a period to plan the sprints. And ideally, it would probably need to "quite frequent" to keep making progress. The period of WG check-ins at the t-compiler meeting seemed interesting. I expect his plate to be full so we'll see, but between 1-2 months looked interesting <em>to me</em>. A la once every 6-7 weeks, or once per Rust release :)</p>



<a name="220637537"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/2021%20sprints/near/220637537" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/2021.20sprints.html#220637537">(Dec 21 2020 at 22:20)</a>:</h4>
<p>To make up for the fact that sometimes, our schedules would not allow to fully participate (disregarding timezones; and maybe there's leeway here, since the Boston afternoons would overlap with EU after-office hours for example), I was thinking that we'd at least prepare beforehand so that some work is at least available</p>



<a name="220637620"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/2021%20sprints/near/220637620" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/2021.20sprints.html#220637620">(Dec 21 2020 at 22:21)</a>:</h4>
<p>Some sync time is always nice and required, but also there can be some "async sprint", for examples PRs to review, analyses or plans to read and so on</p>



<a name="220638143"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/2021%20sprints/near/220638143" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/2021.20sprints.html#220638143">(Dec 21 2020 at 22:27)</a>:</h4>
<p>So my personal plans for this are at least:</p>
<ul>
<li>work on "finalizing" our rules, and make the code match that: we can't really really finalize until more work is done on some fronts which we have for the moment focused less, if at all (the <code>Location::All</code> fix, more move errors work, rules for variance and invariance, whether 'static is correctly handled, membership constraints, arguably higher-ranked subtyping with chalk, etc). At least last sprint we were able to analyze and decide on which paths to ignore for now (equality rules, only using placeholder loans for subset errors, etc). I'll also be looking to improve our implementation of the rules dealing with placeholders (where in soufflé we were using the ";" combinator, while our code is still hacking this by modifying the liveness data instead of having more rules)</li>
<li>finalize the illegal subset errors work we prototyped last time</li>
<li>document more of the rules and put them in the book</li>
<li>hopefully add the way we discussed last sprint to temporarily bypass the move/init computation (even though I have started looking at Albin's work on this)</li>
<li>some of the cleanups we mentioned before: since renaming the relations will require changing rustc's fact generation anyway, it's a good time to tweak the API to remove the fact cloning, or tuple reordering we're doing now</li>
</ul>



<a name="220638252"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/2021%20sprints/near/220638252" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/2021.20sprints.html#220638252">(Dec 21 2020 at 22:28)</a>:</h4>
<p>I have <a href="https://github.com/rust-lang/polonius/pull/155">https://github.com/rust-lang/polonius/pull/155</a> for the first bullet point (which is mostly about renaming), and <a href="https://github.com/rust-lang/polonius/pull/156">https://github.com/rust-lang/polonius/pull/156</a> for the subset errors; some local changes to remove the clones; and the rustc branch to update to these new names.</p>



<a name="220638299"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/2021%20sprints/near/220638299" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/2021.20sprints.html#220638299">(Dec 21 2020 at 22:28)</a>:</h4>
<p>(I don't expect reviews or anything until the sprint)</p>



<a name="220639352"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/2021%20sprints/near/220639352" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/2021.20sprints.html#220639352">(Dec 21 2020 at 22:40)</a>:</h4>
<p>(as a fun point about the <code>Location::All</code> work: I was earlier wondering why <a href="https://github.com/rust-lang/rust/blob/master/src/test/ui/intrinsics/intrinsics-integer.rs">https://github.com/rust-lang/rust/blob/master/src/test/ui/intrinsics/intrinsics-integer.rs</a> was so slow. Turns out there are 167M outlives tuples, the facts are 7GB. All but ~32K or so of them are "outlives at all points". The slowest part was the move/init analysis at 4-8 minutes or something, but even the location insensitive pass was 6s where NLLs should be &lt;200ms. I suspect similar queries on the SCCs to be in the same ballpark but I'll need to check that -- and fact generation take 1s anyways)</p>



<a name="220673664"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/2021%20sprints/near/220673664" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/2021.20sprints.html#220673664">(Dec 22 2020 at 09:44)</a>:</h4>
<ul>
<li>as Niko was working on his own <code>Location::All</code> fix last sprint (which IIRC would be located in fact generation only), I'll hold off for now on opening the rustc and polonius PRs for my own fix (which involve changing both fact generation and the datalog rules) until next sprint when he can tell us which of the two techniques is more viable</li>
</ul>



<a name="220706474"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/2021%20sprints/near/220706474" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/2021.20sprints.html#220706474">(Dec 22 2020 at 16:18)</a>:</h4>
<p>for the third bullet point, I've updated and rebased <a href="https://github.com/rust-lang/polonius/pull/126">https://github.com/rust-lang/polonius/pull/126</a> which was about describing relations:</p>
<ul>
<li>I've renamed everything to represent the state after the earlier two PRs</li>
<li>I've added the new relations (mostly for subset errors) that were more recent than the PR (but not described anything in the initialization and liveness analyses)</li>
<li>I've added documentation about the loan analysis and its rules</li>
<li>a bit of summary, a couple links here and there</li>
</ul>
<p>I was thinking "introducing origin" and "loan introduced" was a nice alternative to loans being "issued", but have not used that in the PR. What do people think ?</p>



<a name="220706764"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/2021%20sprints/near/220706764" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/2021.20sprints.html#220706764">(Dec 22 2020 at 16:21)</a>:</h4>
<p>(I'll now work on <code>;</code> to fix our materialization of placeholder liveness at all points)</p>



<a name="220733631"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/2021%20sprints/near/220733631" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/2021.20sprints.html#220733631">(Dec 22 2020 at 20:58)</a>:</h4>
<p>I think this is "just" expanding each rule that only checked whether an origin was live at a given point to also check whether the origin is a placeholder. The opt variant has interesting cases where it's trying to limit the TC explicitly to origins that die along an edge, and relies a lot on <code>!origin_live_on_entry</code>. I was tempted that this would mean one'd need to explicitly reject them with a<code>!placeholder(origin)</code> antijoin, to mirror the unions with <code>placeholder(origin)</code> that <code>;</code> creates, but I think I've convinced myself that removing the placeholders from the liveness data implicitly does the same thing (then again, maybe not). I'll try it and if it works, open a draft PR so that there can be comments about that approach during the sprint</p>



<a name="220737248"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/2021%20sprints/near/220737248" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/2021.20sprints.html#220737248">(Dec 22 2020 at 21:44)</a>:</h4>
<p><span class="user-mention" data-user-id="116155">@Jake Goulding</span> re: <span aria-label="truck" class="emoji emoji-1f69b" role="img" title="truck">:truck:</span> it's not _that_ expensive :p it did simplify rules a lot, like I now have to add 2 to 4 slightly different expansions to 70% of the rules in the opt variant</p>



<a name="220737308"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/2021%20sprints/near/220737308" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jake Goulding <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/2021.20sprints.html#220737308">(Dec 22 2020 at 21:44)</a>:</h4>
<p>I was actually going for "semi-truck" for "semi-colon". Emoji can be a blunt instrument sometimes <span aria-label="no mouth" class="emoji emoji-1f636" role="img" title="no mouth">:no_mouth:</span></p>



<a name="220737328"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/2021%20sprints/near/220737328" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/2021.20sprints.html#220737328">(Dec 22 2020 at 21:44)</a>:</h4>
<p>haha</p>



<a name="220737378"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/2021%20sprints/near/220737378" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jake Goulding <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/2021.20sprints.html#220737378">(Dec 22 2020 at 21:45)</a>:</h4>
<p>I really just wanted to cheerlead; to let you know that someone out in the void was reading what you wrote (even if I don't follow it)</p>



<a name="220737619"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/2021%20sprints/near/220737619" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/2021.20sprints.html#220737619">(Dec 22 2020 at 21:48)</a>:</h4>
<p>much appreciated, friend :)</p>



<a name="220738387"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/2021%20sprints/near/220738387" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/2021.20sprints.html#220738387">(Dec 22 2020 at 21:58)</a>:</h4>
<p>my intention is that these are mostly messages in a bottle, in a sea that will reach the future sprint, so that Niko and Albin have something to do and talk about, about this work even if I'm not there all the time :)</p>



<a name="220754274"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/2021%20sprints/near/220754274" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/2021.20sprints.html#220754274">(Dec 23 2020 at 01:42)</a>:</h4>
<p>after testing with rustc, there seems to be no difference in results in the UI suite. I didn't add the placeholder antijoins yet but we should, so I've opened a draft PR <a href="https://github.com/rust-lang/polonius/pull/157">https://github.com/rust-lang/polonius/pull/157</a> for explanation and discussion, and we'll see when the sprint comes</p>



<a name="221006498"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/2021%20sprints/near/221006498" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/2021.20sprints.html#221006498">(Dec 27 2020 at 12:12)</a>:</h4>
<p>I've now also updated the <a href="https://github.com/rust-lang/polonius/pull/126">book improvement PR</a> to add documentation and rules about the <code>LocationInsensitive</code> variant</p>



<hr><p>Last updated: Aug 07 2021 at 22:04 UTC</p>
</html>